package com.bs.areport.action.report;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bs.areport.service.master.UserManageDao;
import com.bs.areport.service.report.DeptIncomeByChargeDao;
import com.bs.areport.service.util.DataUtil;
import com.bs.areport.service.util.EntityType;
import com.bs.restframework.context.SystemContext;
import com.bs.restframework.context.util.SystemContextUtil;
import com.bs.restframework.db.Database;
import com.bs.restframework.session.UserSession;
import com.bs.restframework.web.result.ResultModle;
import com.bs.restframework.web.result.ResultType;

/**
 * 
 * <p>类名称：单位收费情况表控制类</p>
 * <p>创建时间：2012-03-16</p>
 * <p>作者：李新宇</p>
 */
public class DeptIncomeByChargeAction {
	
	private DeptIncomeByChargeDao dao;
	public  DeptIncomeByChargeDao getDao() {
		return dao;
	}

	public void setDao(DeptIncomeByChargeDao dao) {
		this.dao = dao;
	}
	
	private List<Map> colList;
	private List<Map> steps;
	private String stepIndex="-1";
	
	/**
	 * 
	 * <p>函数名称：list</p>
	 * <p>功能说明：查询列表</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-16</p>
	 * <p>作者：李新宇</p>
	 */
	public ResultModle list() throws Exception
	{		
		Map<String, Object> params = SystemContext.getInParams();
		
		//获取用户单位信息
		String token =(String)params.get("Token");
		UserSession userSession = SystemContextUtil.getSessionMange().getUserSession(token);
		String userDeptCode=(String)userSession.getAttribute("deptCode");
		stepIndex=(String)params.get("stepIndex");
        Map<String, Object> resultBean = dao.getReportPro(params, colList,userDeptCode); 

       //记录访问足迹
	    recordSteps(params);
        
        resultBean.put("steps", steps);
        resultBean.put("stepIndex", stepIndex);
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);
	}
	
	/**
	 * 
	 * <p>函数名称：getGridCol</p>
	 * <p>功能说明：获取报表列</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-16</p>
	 * <p>作者：李新宇</p>
	 */
	public ResultModle loadPage() throws Exception
	{
		Map<String, Object> params = SystemContext.getInParams();
		//是否是点击访问足迹触发
		String isStep=(String)params.get("isStep");
		stepIndex=(String)params.get("stepIndex");
        Map<String, Object> resultBean =new HashMap<String, Object>();
        List<Map> cols=null;
        
        //如果列头数据集为空或单位和项目编码不为空或者是访问足迹触发
        if ((colList==null||colList.size()<=0)||
        		((params.get("deptCode")==null&&params.get("ChargeCode")==null))||
        		(("".equals(((String)params.get("deptCode")))&&"".equals((String)params.get("ChargeCode"))))||"Y".equals(isStep))
        {	
        	//如果不是访问足迹触发，足迹不为空，则清空访问足迹
        	if((!"Y".equals(isStep))&&(steps!=null)){ 
        	    steps.clear();
        	    stepIndex="-1";
        	}
        	//获取列头数据集
        	cols= dao.getCharges(params);
        	//重新获取列头
        	params.put("isReCols", "Y");
        	//如果获取到了列头数据集不为空则赋值给公用变量
        	if(cols!=null&&cols.size()>0)
             	colList=cols;
        }
        
        Integer chargelevel=1;
        if((params.get("chargeLevel")!=null)&&(!"undefined".equals((String)params.get("chargeLevel"))))
        chargelevel= Integer.parseInt(params.get("chargeLevel").toString());
        Integer deptLevel=1;
        if((params.get("deptLevel")!=null)&&(!"undefined".equals((String)params.get("deptLevel"))))
         deptLevel=Integer.parseInt(params.get("deptLevel").toString());
        
        String dateStart=(String)params.get("dateStart");
		String dateEnd=(String)params.get("dateEnd");

		//如果是初次访问页面则设置初始日期条件
		if((dateStart==null||"".equals(dateStart))&&(dateEnd==null||"".equals(dateEnd))){
			Date date=new Date();
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			String datetime=sdf.format(date);
	
			dateStart=datetime.substring(0, datetime.length()-2)+"01";
			dateEnd=datetime;
		}
        
        //记录访问足迹
        recordSteps(params);

        
          
        resultBean.put("steps", steps); 
        resultBean.put("stepIndex", stepIndex);
        resultBean.put("gridCols", colList);
        resultBean.put("chargeLevel", chargelevel);
        resultBean.put("deptLevel", deptLevel);
        resultBean.put("deptCode", params.get("deptCode"));
        resultBean.put("chargeCode", params.get("chargeCode"));
        resultBean.put("isReCols", params.get("isReCols"));
        resultBean.put("dateStart", dateStart);
        resultBean.put("dateEnd", dateEnd);
        
		return new ResultModle(ResultType.OUTPUT_JSP_VIEW, "/pages/report/master/deptCharge", resultBean);
	}
	
	
	/**
	 * 
	 * <p>函数名称：getQtip</p>
	 * <p>功能说明：获取饼图数据</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-21</p>
	 * <p>作者：李新宇</p>
	 */
	 public ResultModle getQtip() throws Exception
	 {
		 Map<String, Object> params = SystemContext.getInParams();	
		 Map<String, Object> resultBean =new HashMap<String, Object>();
		 String token =(String)params.get("Token");
		 UserSession userSession = SystemContextUtil.getSessionMange().getUserSession(token);
		 String userDeptCode=(String)userSession.getAttribute("deptCode");
		 
		 List<Map> list=dao.getQtip(params,userDeptCode);
		 
		 resultBean.put("qtipData", list);
		 
		 return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);
	 }
	 

		/**
		 * 
		 * <p>函数名称：isHasNext</p>
		 * <p>功能说明：获取下级收费项目列</p>
		 * <p>参数说明：</p>
		 * <p>创建时间：2012-03-21</p>
		 * <p>作者：李新宇</p>
		 */	 
	 public ResultModle isHasNext() throws Exception
	 {
		 Map<String, Object> params = SystemContext.getInParams();	
	     Map<String, Object> resultBean =new HashMap<String, Object>();
	     List<Map> cols=null;
	     cols= dao.getCharges(params);
     	 if(cols!=null&&cols.size()>0)
         	colList=cols;
     	 
     	resultBean.put("gridCols", colList);
	     return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user" ,resultBean);   
	 }	 
	 
		/**
		 * 
		 * <p>函数名称：recordSteps</p>
		 * <p>功能说明：记录访问足迹</p>
		 * <p>参数说明：</p>
		 * <p>创建时间：2012-03-21</p>
		 * <p>作者：李新宇</p>
		 */	 
	 public void recordSteps(Map<String, Object> params) throws Exception
	 {
		 String rowName=(String)params.get("rowName");
		 String colName=(String)params.get("colName");
		 
		 //如果不是查询，而且不是访问足迹触发则转码并继续操作
		 if((params.get("isReCols")!=null&&"Y".equals((String)params.get("isReCols")))||(params.get("isStep")!=null&&"Y".equals((String)params.get("isStep")))){
			 if(colName!=null)
			     colName=new String(colName.getBytes("ISO-8859-1"),"UTF-8");
			 if(rowName!=null)
			     rowName=new String(rowName.getBytes("ISO-8859-1"),"UTF-8");
			 params.put("rowName", rowName);
			 params.put("colName", colName);
		 }
		 
		 //如果导航条件不为空则继续
		 if((rowName!=null&&!"".equals(rowName))||(colName!=null&&!"".equals(colName))){
			 
			 if(steps==null)
				 steps=new ArrayList<Map>();
			 String stepName="";
			 
			 //如果项目条件不为空，则加入足迹名称
			 if(colName!=null)
			     stepName+=colName;
			 
			 //如果项目条件和单位条件都不为空
			 if(!"".equals(stepName)&&rowName!=null&&!"".equals(rowName))
				 stepName+="*";
			 
			 //单位条件不为空，则加入足迹名称
			 if(rowName!=null)
			     stepName+=rowName;
			 
			 params.put("stepName", stepName);
			 
			 //如果访问足迹多于15个则删掉最前一个
			 if(steps.size()>=15)
				 steps.remove(0);
			 
			 //如果有相同的访问足迹则先移除再添加
			 for (Map<String,Object> m : steps) {
					if(stepName.equals(m.get("stepName").toString()))
					{
						steps.remove(m);
						break;
					}
			}
			 
			 steps.add(params);
			 stepIndex=Integer.toString(steps.size()-1);
		 }
	 }
	 
}
